package cube.utils.exec;

/**
 * bean调用
 * 
 * @author abiao
 */
public class BeanInvoker<ResultObject> {

    /**
     * 参数类型
     */
    private Class<?>[] paramTypes;

    /**
     * 参数值
     */
    private Object[] paramValues;

    /**
     * 通过反射调用对象方法
     */
    public ResultObject invoke(Object o, String method) throws Exception {
        return invoke(o, o.getClass(), method);
    }

    /**
     * 通过反射调用类的静态方法
     */
    public ResultObject invoke(Class<?> c, String method) throws Exception {
        return invoke(null, c, method);
    }

    /**
     * 通过反射调用对象方法
     */
    @SuppressWarnings("unchecked")
    private ResultObject invoke(Object o, Class<?> c, String name)
            throws Exception {
        Object result = null;
        result = c.getMethod(name, paramTypes).invoke(o, paramValues);
        return (ResultObject) result;
    }

    /**
     * @param paramTypes the paramTypes to set
     */
    public void setParamTypes(Class<?>... paramTypes) {
        this.paramTypes = paramTypes;
    }

    /**
     * @param paramValues the paramValues to set
     */
    public void setParamValues(Object... paramValues) {
        this.paramValues = paramValues;
    }
}
